package com.zwx.aray.leetcode_5;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 存在重复
 * 给定一个整数数组，判断是否存在重复元素。
 * 如果任何值在数组中出现至少两次，函数返回 true。如果数组中每个元素都不相同，则返回 false。
 *
 * @author 文希
 * @create 2019-06-27 23:53
 */
public class ContainsDuplicate {

    /**
     * 思路：
     * 首先想到的就是用一个Map来存储数组中的值及其对应出现的次数，
     * 不过因为最后需要判断所有数值的出现次数，也就是要遍历一遍我们的Map，
     * 所以用LinkedHashMap实现比较容易。
     *
     * @param nums
     * @return
     */
    private static boolean containsDuplicate(int[] nums) {
        LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
        if (nums.length == 0) {
            return false;
        }
        // 遍历数组
        for (int num : nums) {
            //重复数字，更新重复次数
            if (map.get(num) != null) {
                int number = map.get(num);
                map.put(num, number + 1);
            } else {
                //未重复数字，添加进map
                map.put(num, 1);
            }
        }
        // 变量map
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() > 1) {
                return true;
            }
        }
        return false;
    }

    private static Integer getFirstDoubleRepetitiveItem(int[] nums) {
        LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
        if (nums.length == 0) {
            return null;
        }
        // 遍历数组
        for (int num : nums) {
            //重复数字，更新重复次数
            if (map.get(num) != null) {
                int number = map.get(num);
                map.put(num, number + 1);
            } else {
                //未重复数字，添加进map
                map.put(num, 1);
            }
        }
        // 变量map
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 2) {
                return map.get(entry.getValue());
            }
        }
        return null;
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,2,3,4,2};
        Integer test = getFirstDoubleRepetitiveItem(nums);
        System.out.println("test = " + test);
    }
}
